﻿#!/bin/bash
CURL=/usr/local/bin/curl
# gdzie będą umieszczane tymczasowe wyniki?
TEMPDIR=/tmp

# plik z adresami URL do zaatakowania — po jednym w każdym wierszu
URLFILE=urls.txt

# plik zawierający ciągi ataków XSS — po jednym w każdym wierszu
ATTACKS=xss-strings.txt

# deskryptor 3 oznacza plik z adresami URL
3<"${URLFILE}"

# deskryptor 4 oznacza plik z ciągami ataków XSS
4<"${ATTACKS}"

typeset -i FAILED

// Dla każdego adresu URL z pliku URLFILE
while read -u 3 URL
do
    TEMPFILE="${TEMPDIR}/curl${RANDOM}.html"
    FAILED=0
    // Atak dla każdego ciągu w pliku ATTACKS
    while read -u 4 XSS
    do
    # Wywołanie programu cURL w celu pobrania strony; dane będą zapisane w pliku tymczasowym, ponieważ
    # trzeba także sprawdzić kod błędu. Za pomocą polecenia grep sprawdzimy, czy wynik zawiera
    # interesujące wyniki.
    curl -f -s -o "${TEMPFILE}" "${URL}${XSS}"
    RETCODE=$?

    echo "ret: $RETCODE"

    # Sprawdzenie, czy nastąpiła awaria programu cURL lub serwera.
    if [ $RETCODE != 0 ]
    then
    echo "FAIL:(curl ${RETCODE}) ${URL}${XSS}"
    else 
    # Uruchomienie programu cURL zakończyło się sukcesem. Sprawdzanie obecności ciągu ataku w wyniku.
    rm -f "${TEMPFILE}"
    result=$(grep -c "${XSS}" "${TEMPFILE}")
    # Jeśli otrzymaliśmy 1 lub więcej pasujących wyników, witryna jest wrażliwa.
    if [ "$result" != 0 ]
    then
        echo "NIEPOWODZENIE: ${URL}${XSS}"
        FAILED=${FAILED}+1
    else
        echo "SUKCES: ${URL}${XSS}"
        fi
    fi
    rm -f "${TEMPFILE}"
    done
    if [ $FAILED -gt 0 ]
    then
    echo "$FAILED niepowodzeń dla ${URL}"
    else
    echo "SUKCES: ${URL}"
    fi
done
